home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / PROGRAMR / OLE2BOOK.ZIP / CHAP06.ZIP / CHAP06 / COSCHMOO / COSCHMOO.H < prev    next >
C/C++ Source or Header  |  1993-04-13  |  7KB  |  242 lines

  1. /*
  2.  * COSCHMOO.H
  3.  * Component Schmoo Chapter 6
  4.  *
  5.  * Single include file that pulls in everything needed for other source
  6.  * files in the Schmoo application.
  7.  *
  8.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Software Design Engineer
  11.  * Microsoft Systems Developer Relations
  12.  *
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16.  
  17.  
  18. #ifndef _COSCHMOO_H_
  19. #define _COSCHMOO_H_
  20.  
  21. #include <windows.h>
  22. #include <memory.h>
  23. #include <ole2.h>
  24. #include <ole2ver.h>
  25. #include <bookguid.h>
  26. //CHAPTER6MOD
  27. #include <ipoly6.h>
  28. //End CHAPTER6MOD
  29.  
  30. //These include files reference DLLs that don't have extern "C" already
  31. extern "C"
  32.     {
  33.     #include <commdlg.h>
  34.     }
  35.  
  36. #include <classlib.h>
  37. #include "resource.h"
  38.  
  39.  
  40.  
  41. //COSCHMOO.CPP:  Frame object that creates a main window
  42.  
  43. class __far CSchmooFrame : public CFrame
  44.     {
  45.     private:
  46.         HBITMAP         m_hBmpLines[5];     //Menu item bitmaps
  47.  
  48.         BOOL            m_fInitialized;     //CoInitialize work?
  49.  
  50.     protected:
  51.         //Overridable for creating a CClient for this frame
  52.         virtual LPCClient CreateCClient(void);
  53.  
  54.         //FRegisterAllClasses override unneccessary with Polyline DLL
  55.         virtual BOOL      FPreShowInit(void);
  56.         virtual UINT      CreateGizmos(void);
  57.  
  58.         virtual LRESULT   OnCommand(HWND, WPARAM, LPARAM);
  59.         virtual void      OnDocumentDataChange(LPCDocument);
  60.         virtual void      OnDocumentActivate(LPCDocument);
  61.  
  62.         //New for this class
  63.         virtual void      CreateLineMenu(void);
  64.  
  65.     public:
  66.         CSchmooFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  67.         virtual ~CSchmooFrame(void);
  68.  
  69.         //Overrides
  70.         virtual BOOL      FInit(LPFRAMEINIT);
  71.         virtual void      UpdateMenus(HMENU, UINT);
  72.         virtual void      UpdateGizmos(void);
  73.  
  74.         //New for this class
  75.         virtual void      CheckLineSelection(UINT);
  76.     };
  77.  
  78.  
  79. typedef CSchmooFrame FAR * LPCSchmooFrame;
  80.  
  81.  
  82.  
  83.  
  84.  
  85. //CLIENT.CPP
  86.  
  87. /*
  88.  * The only reason we have a derived class here is to override
  89.  * CreateCDocument so we can create our own type as well as
  90.  * overriding NewDocument to perform one other piece of work once the
  91.  * document's been created.
  92.  */
  93.  
  94. class __far CSchmooClient : public CClient
  95.     {
  96.     protected:
  97.         //Overridable for creating a new CDocument
  98.         virtual LPCDocument CreateCDocument();
  99.  
  100.     public:
  101.         CSchmooClient(HINSTANCE);
  102.         virtual ~CSchmooClient(void);
  103.  
  104.         virtual LPCDocument NewDocument(BOOL, LPCDocumentAdviseSink);
  105.     };
  106.  
  107.  
  108. typedef CSchmooClient FAR * LPCSchmooClient;
  109.  
  110.  
  111.  
  112.  
  113. //DOCUMENT.CPP
  114.  
  115. //CHAPTER6MOD
  116. class __far CPolylineAdviseSink : public IPolylineAdviseSink6
  117.     {
  118.     private:
  119.         LPVOID              m_pv;        //Customizable structure
  120.         ULONG               m_cRef;
  121.         LPUNKNOWN           m_punkOuter; //Unknown for delegation
  122.  
  123.     public:
  124.         CPolylineAdviseSink(LPVOID, LPUNKNOWN);
  125.         ~CPolylineAdviseSink(void);
  126.  
  127.         //IUnknown members
  128.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  129.         STDMETHODIMP_(ULONG) AddRef(void);
  130.         STDMETHODIMP_(ULONG) Release(void);
  131.  
  132.         //Advise members.
  133.         STDMETHODIMP_(void) OnPointChange(void);
  134.         STDMETHODIMP_(void) OnSizeChange(void);
  135.         STDMETHODIMP_(void) OnColorChange(void);
  136.         STDMETHODIMP_(void) OnLineStyleChange(void);
  137.     };
  138.  
  139. typedef CPolylineAdviseSink FAR * LPCPolylineAdviseSink;
  140.  
  141.  
  142. /*
  143.  * The generic advisory interface.  This object controls it's own
  144.  * lifetime and the document becomes a user of the object with
  145.  * the last reference count.
  146.  */
  147.  
  148. class __far CImpIAdviseSink : public IAdviseSink
  149.     {
  150.     protected:
  151.         ULONG               m_cRef;      //Interface reference count.
  152.         LPVOID              m_pObj;      //Back pointer to the document
  153.         LPUNKNOWN           m_punkOuter; //Unknown for delegation
  154.  
  155.     public:
  156.         CImpIAdviseSink(LPVOID, LPUNKNOWN);
  157.         ~CImpIAdviseSink(void);
  158.  
  159.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  160.         STDMETHODIMP_(ULONG) AddRef(void);
  161.         STDMETHODIMP_(ULONG) Release(void);
  162.  
  163.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  164.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  165.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  166.         STDMETHODIMP_(void)  OnSave(void);
  167.         STDMETHODIMP_(void)  OnClose(void);
  168.     };
  169.  
  170. //End CHAPTER6MOD
  171.  
  172.  
  173.  
  174. //Constant ID for the window polyline that lives in a document window
  175. #define ID_POLYLINE         10
  176.  
  177.  
  178. class __far CSchmooDoc : public CDocument, public IUnknown
  179.     {
  180.     friend class CPolylineAdviseSink;
  181.     friend class CImpIAdviseSink;
  182.  
  183.     protected:
  184.         UINT                    m_uPrevSize;        //Last WM_SIZE wParam
  185.  
  186.         //Interface we use on the Polyline Object
  187.         LPPOLYLINE              m_pPL;
  188.         LPPERSISTSTORAGE        m_pIPersistStorage;
  189.  
  190.         //CHAPTER6MOD
  191.         //Interfaces we implement
  192.         LPPOLYLINEADVISESINK    m_pPLAdv;       //Polyline
  193.         LPADVISESINK            m_pIAdviseSink; //Standard for OnDataChange
  194.  
  195.         DWORD                   m_dwConn;       //Advisory connection
  196.         ULONG                   m_cRef;         //Document ref count
  197.         //EndCHAPTER6MOD
  198.  
  199.     protected:
  200.         virtual BOOL    FMessageHook(HWND, UINT, WPARAM, LPARAM, LRESULT FAR *);
  201.  
  202.     public:
  203.         CSchmooDoc(HINSTANCE);
  204.         virtual ~CSchmooDoc(void);
  205.  
  206.         //CHAPTER6MOD
  207.         //Since we implement multiple interfaces we need a controlling unknown
  208.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  209.         STDMETHODIMP_(ULONG) AddRef(void);
  210.         STDMETHODIMP_(ULONG) Release(void);
  211.         //End CHAPTER6MOD
  212.  
  213.         virtual BOOL     FInit(LPDOCUMENTINIT);
  214.         virtual void     Clear();
  215.  
  216.         virtual UINT     ULoad(BOOL, LPSTR);
  217.         virtual UINT     USave(UINT, LPSTR);
  218.  
  219.         virtual void     Undo(void);
  220.         virtual BOOL     FClip(HWND, BOOL);
  221.         virtual HGLOBAL  RenderFormat(UINT);
  222.         virtual BOOL     FQueryPaste(void);
  223.         virtual BOOL     FPaste(HWND);
  224.  
  225.         virtual COLORREF ColorSet(UINT, COLORREF);
  226.         virtual COLORREF ColorGet(UINT);
  227.  
  228.         virtual UINT     LineStyleSet(UINT);
  229.         virtual UINT     LineStyleGet();
  230.     };
  231.  
  232. typedef CSchmooDoc FAR * LPCSchmooDoc;
  233.  
  234.  
  235. //These color indices wrap the polyline definitions
  236. #define DOCCOLOR_BACKGROUND             POLYLINECOLOR_BACKGROUND
  237. #define DOCCOLOR_LINE                   POLYLINECOLOR_LINE
  238.  
  239.  
  240.  
  241. #endif //_COSCHMOO_H_
  242.